<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
<button>按钮1</button>
<button>按钮2</button>
<button>按钮3</button>
<script>
/*
函数会比变量在window对象中先初始化
this对象指的就是当前浏览器window对象。
*/
var a = 10
function logTest(){
	console.log(a) // undefined 
	var a = 1000
}
logTest()

console.log("------------")
//var b = 10
//function b(b){
//	console.log(b)
//	var b = 100
//}
//b(200) // 报错 b not a function 

console.log("------------")//使用闭包的一个例子
var btnArr = document.getElementsByTagName("button")
for(var i=0,length = btnArr.length;i < length;i++){
	// 匿名函数调用绑定监听事件
	(function(i){
		var btn = btnArr[i]
		btn.index = i + 1
		btn.onclick = function(){
			alert("点击按钮"+this.index)
		}
	})(i)
	
}
console.log("i:"+i) //i的值是去在window对象中的全局变量


/**
 * 闭包
 * 1.条件:
 *     函数内部嵌套了函数,而且内部函数还是用了外部函数的变量.
 * 2.作用:
 *     是函数内部的局部变量在函数执行完后仍然存在内存中可以在外部调用.
 * 3.周期:
 *     在内部函数定义执行完后就已经产生了,在么有引用(指针)指向内部函数的时候被回收.
 */

function fn1(){
	var a = 10;
	function f1(){
		console.log(a++);
	}
	function f2(){
		console.log(a--);
	}
	return f2
}

var f = fn1()
f() // 10
f() // 9
f() // 8
f = null // 闭包函数死亡,因为没有应用指向它

</script>

<!-- 引入自定义闭包模块 -->
<script  src="myModule.js"></script>
<script>
var mm = myModule()
mm.some()
mm.other()
</script>

<script  src="myModule2.js"></script>
<script>
myModule2.some()
myModule2.other()
</script>

<script>
	
console.log("*************")
function test(m,n=20){//n的默认值
	console.log(m,n)
}
test(10)
</script>

	</body>
</html>
